//@flow


/**
 * 跳转方法，全局使用
 */

import { NavigationActions } from "react-navigation";
import { PageBase } from "../base/pageBase";

/**用户登陆过程取消的登陆的原因类型 */
export type UserLoginCancelReason = {code:0,reason:'用户点击了取消按钮'}
/**唤起登陆过程，用于取消、或者其他原因停止继续登陆得回调 */
export type OnLoginCancel = (reason:UserLoginCancelReason)=>{};
/**唤起登陆，并且用户登陆成，将要执行的操作 */
export type OnLoginSuccess = ()=>{}

export class Navigate {
    /**switch */
    static  Navigator = null;
    /**根导航 */
    static  StackNavigator = null;
    static SetTopLevelNavigator(navigatorRef) {
        console.log(`设置导航:${navigatorRef}`)
        Navigate.Navigator = navigatorRef;
    }
    static SetRootStack(navigatorRef){
        Navigate.StackNavigator = navigatorRef ;
    }
    static Back(){
        // Navigate.Navigator.dispatch(
        //     NavigationActions.back()
        // )
        Navigate.StackNavigator.dispatch(
            NavigationActions.back()
        )
    }
    /**
     * 在跳转的过程中需要判断下面内容
     * 1，所进入的页面是否是可进入界面，即免登录
     * 2，如果将要进入的界面是登陆必须的，则弹起登陆
     * @param {跳转的页面} pathName 
     * @param {跳转携带的参数} params 
     */
    static navigate(pathName:string,params:Object){
        let navigation = NavigationActions.navigate({
            routeName:pathName,
            params:params,
        })
        // Navigate.Navigator.dispatch(navigation)
        // Navigate.StackNavigator.dispatch(navigation)
        if(Navigate.Navigator!=null){
            Navigate.Navigator.dispatch(navigation)
        }else {
            alert('navigator is null')
        }
        
    }
    //获取当前所在深度,处于堆栈的什么位置
    static getIndexInStack():number{
        if(Navigate.Navigator){
            return Navigate.Navigator.state.nav.index;
        }
        return 0;
    }

}